package cn.blnp.net.flowable.event.base.message;

import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.Execution;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;

/**
 * <h3>消息事件定义</h3>
 *
 * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
 * @version 1.0
 * @since 2025/5/7 9:32
 */
@Slf4j
@SpringBootTest
public class EventMsgTest {

    @Resource
    private RuntimeService runtimeService;

    /**
     *  <p>
     *   &emsp;&emsp;与信号不同的是，消息只能指向一个接收对象，而不能像信号那样全局广播。消息事件可以嵌入开始事件、边界事件和中间捕获事件中构成消息开始事件、消息边界事件和消息中间事件。
     *   消息使用message元素定义，被声明为流程定义definitions根元素的子元素，属性包含id和name。消息事件使用messageEventDefinition元素定义，通过其messageRef属性引用一个消息（其值
     *   为message的id）。以定义消息中间捕获事件为例：
     *  </p>
     *  <pre>
     *      {@code
     *         <!-- 定义消息 -->
     *         <message id="theMessage" name="测试消息" />
     *         <process id="messageProcess">
     *             <!-- 定义消息中间捕获事件 -->
     *             <intermediateCatchEvent id="catchMessageEvent" name="测试消息中间事件">
     *                 <!-- 包含 messageEventDefinition子元素，代表消息中间事件 -->
     *                 <messageEventDefinition messageRef="theMessage" />
     *              </intermediateCatchEvent>
     *              <!-- 其他元素省略 -->
     *         </process>
     *      }
     *  </pre>
     */

    @Test
    public void test() {
        List<Execution> executions = runtimeService.createExecutionQuery()
                .messageEventSubscriptionName("测试消息")
                .list();
    }
}
